import DB from "../database";
import { HttpException } from "../exceptions/HttpException";
import { User, UserResponse } from "../interfaces/user.interface";
class UserService {
    // public 关键字的作用:
    // 1. 访问修饰符,表示该成员可以被任何代码访问
    // 2. 在类的外部也可以访问和使用这个成员
    // 3. 是TypeScript中最开放的访问级别
    // 4. 常用于需要对外暴露的方法和属性
    public User = DB.Users
    // 查找全部用户
    public async findAll(query:any):Promise<UserResponse> {
        const { count, rows } = await this.User.findAndCountAll(query)
        return { Data: rows, count  }
    }

    public async findUserById(id:number):Promise<User> {
        const findUser:User | null = await this.User.findByPk(id)
        if(!findUser) return {} as User
        return findUser
    }
    // 在TypeScript中:
    // : 用于类型注解,声明变量或参数的类型
    // 例如 let name: string = "Trae"
    // 
    // <> 用于泛型,可以让类型参数化
    // 例如 Promise<User> 表示这是一个返回User类型的Promise
    // Array<string> 表示字符串数组

    public async findUserByUsername(username:string):Promise<User> {
        const findUser:User | null = await this.User.findOne({ where: { username } })
        if(!findUser) return {} as User
        return findUser
    }
    public async createUser(Data: User): Promise<User> {
        const createUser: User = await this.User.create({ ...Data })
        return createUser
    }
    public async updateUser(id:number,Data:User):Promise<User> {
        console.log("Data", Data, id)
        const res: any = await this.User.update({...Data}, {where: {id: id}})
        console.log("res", res)
        return res
    }
   
    public async findAndCountAll(query:any):Promise<UserResponse> {
        const { count, rows } = await this.User.findAndCountAll(query)
        return { Data: rows, count  }
    }
}

export default UserService;